home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 551-575 / disk_575 / pplib / oberoninterface / powerpacker.mod < prev   
Text File  |  1992-05-06  |  5KB  |  125 lines

  1. (* ------------------------------------------------------------------------
  2.   :Program.       PowerPacker
  3.   :Contents.      Interface to Nico François' powerpacker.library
  4.   :Author.        Kai Bolay [kai] (C-Version by Nico François)
  5.   :Address.       Hoffmannstraße 168
  6.   :Address.       D-7250 Leonberg 1 (Germany)
  7.   :Address.       UUCP: ...!cbmvax!cbmehq!cbmger!depot1!amokle!kai
  8.   :Address.       FIDO: 2:247/706.3
  9.   :History.       v1.0 [kai] long ago  (translated from C)
  10.   :History.       v1.3 Nico  some time (updated)
  11.   :History.       v1.3 [kai] 22-Nov-91 (bug fixes)
  12.   :History.       v1.3 Nico  29-Nov-91 (small bug fixes on Kai's request)
  13.   :Copyright.     Freeware
  14.   :Language.      Oberon
  15.   :Translator.    AMIGA OBERON v2.12e, A+L AG
  16.   :Remark.        Thanks to Nico for his great library
  17. ------------------------------------------------------------------------ *)
  18.  
  19. MODULE PowerPacker;
  20.  
  21. (*
  22. **      Filename: libraries/PowerPacker.mod
  23. **      Release: 1.3
  24. **
  25. **      (C) Copyright 1991 Nico François
  26. **          All Rights Reserved
  27. **
  28. *)
  29.  
  30. IMPORT
  31.    e: Exec, I: Intuition;
  32. CONST
  33.    PPName* = "powerpacker.library";
  34.    PPVersion* = 35;
  35.    (* decrunch colors for LoadData and DecrunchBuffer *)
  36.    DecrCol0*  = 0;
  37.    DecrCol1*  = 1;
  38.    DecrPoint* = 2;
  39.    DecrScrol* = 3;
  40.    DecrNone*  = 4;
  41.    (* error codes returned by LoadData *)
  42.    LoadOk*    =  0;
  43.    OpenErr*   = -1;
  44.    ReadErr*   = -2;
  45.    NoMemory*  = -3;
  46.    Crypted*   = -4;
  47.    PassErr*   = -5;
  48.    UnknownPP* = -6;
  49.    (* size of speedup buffer *)
  50.    SpeedupBuffLarge*  = 0;
  51.    SpeedupBuffMedium* = 1;
  52.    SpeedupBuffSmall*  = 2;
  53.    (* crunching efficiency *)
  54.    CrunFast*     = 0;
  55.    CrunMediocre* = 1;
  56.    CrunGood*     = 2;
  57.    CrunVeryGood* = 3;
  58.    CrunBest*     = 4;
  59.    (* possible return values from ppCrunchBuffer() *)
  60.    CrunchAborted  =  0;
  61.    BufferOverflow = -1;
  62. TYPE
  63.    PPBase* = STRUCT (libNode* : e.Library);
  64.                 flags* : SHORTSET;
  65.                 pad* : SHORTINT;
  66.                 segList* : e.BPTR;
  67.              END; (* STRUCT *)
  68.    PPBasePtr* = POINTER TO PPBase;
  69.    (** These two function must preserve all Registers an may not deallocate
  70.        their parameters. Stack checking is not allowed! This means:
  71.        "DeallocPars-" and "SaveAllRegs+" and "StkCheck-!! **)
  72.    PassFunc* = PROCEDURE (checksum: LONGINT; password: e.ADDRESS): BOOLEAN;
  73.    PercFunc* = PROCEDURE (userdata: e.ADDRESS; totlen: LONGINT;
  74.                           crunlen: LONGINT; lensofar: LONGINT): BOOLEAN;
  75. VAR
  76.    pp* : PPBasePtr;
  77.  
  78. PROCEDURE LoadData* {pp, -30} (    filename{8}: ARRAY OF CHAR;
  79.                                    col{0}: LONGINT;
  80.                                    memtype{1}: LONGSET;
  81.                                VAR buffer{9}: e.ADDRESS;
  82.                                VAR len{10}: LONGINT;
  83.                                    func{11}: PassFunc): LONGINT;
  84. PROCEDURE DecrunchBuffer* {pp, -36} (endcrun{8},
  85.                                      decrbuf{9},
  86.                                      effptr{10}: e.ADDRESS;
  87.                                      col{0}: LONGINT);
  88. PROCEDURE CalcCheckSum* {pp, -42} (string{8}: ARRAY OF CHAR): INTEGER;
  89. PROCEDURE CalcPasskey* {pp, -48} (password{8}: ARRAY OF CHAR): LONGINT;
  90. PROCEDURE Decrypt* {pp, -54} (buffer{8}: e.ADDRESS;
  91.                               len{0}, key{1}: LONGINT);
  92. PROCEDURE GetPassword* {pp, -60} (screen{8}: I.ScreenPtr;
  93.                                   buffer{9}: e.ADDRESS;
  94.                                   maxchars{0}: LONGINT;
  95.                                   checksum{1}: INTEGER): BOOLEAN;
  96. PROCEDURE AllocCrunchInfo* {pp, -96} (eff{0}: LONGINT;
  97.                                      speedup{1}: LONGINT;
  98.                                      func{8}: PercFunc;
  99.                                      userdata{9}: e.ADDRESS): e.ADDRESS;
  100. PROCEDURE FreeCrunchInfo* {pp, -102} (crunchinfo{8}: e.ADDRESS);
  101. PROCEDURE CrunchBuffer* {pp, -108} (crunchinfo{8}: e.ADDRESS;
  102.                                    buffer{9}: e.ADDRESS;
  103.                                    len{0}: LONGINT): LONGINT;
  104. PROCEDURE WriteDataHeader* {pp, -114} (lock{0}: LONGINT;
  105.                                       eff{1}: LONGINT;
  106.                                       crypt{2}: BOOLEAN;
  107.                                       checksum{3}: LONGINT): BOOLEAN;
  108. PROCEDURE EnterPassword* {pp, -120} (screen{8}: I.ScreenPtr;
  109.                                      buffer{9}: e.ADDRESS): BOOLEAN;
  110. PROCEDURE ErrorMessage* {pp, -132} (error{0}: LONGINT): e.STRPTR;
  111.  
  112. BEGIN
  113.    pp := e.OpenLibrary (PPName, PPVersion);
  114.    IF pp = NIL THEN
  115.       IF I.DisplayAlert (I.recoveryAlert,
  116.            "\x00\x64\x14missing powerpacker.library V35\o\o", 50) THEN END;
  117.       HALT (20)
  118.    END; (* IF *)
  119. CLOSE
  120.    IF pp # NIL THEN
  121.       e.CloseLibrary (pp);
  122.       pp := NIL;
  123.    END; (* IF *)
  124. END PowerPacker.
  125.